package generics_method_d10;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        // 目标:掌握泛型方法的定义和使用。
        String rs = test("java");
        System.out.println(rs);

        // 需求:所有的汽车可以一起参加比赛。
        ArrayList<Car> cars = new ArrayList<>();
        cars.add(new BMW());
        cars.add(new BENZ());
        go(cars);

        ArrayList<BMW> bmws = new ArrayList<>();
        bmws.add(new BMW());
        bmws.add(new BMW());
        go(bmws);

        ArrayList<BENZ> benzs = new ArrayList<>();
        benzs.add(new BENZ());
        benzs.add(new BENZ());
        go(benzs);

        //泛型不支持基本数据类型，只能支持对象类型(引用数据类型)
        ArrayList<Integer> list1 = new ArrayList<>();
        list1.add(12);
        System.out.println(list1);
        ArrayList<Double> list2 = new ArrayList<>();
        list2.add(23.3);
        System.out.println(list2);
    }

    //?通配符，在使用泛型的时候可以代表一切类型
    //? extends Car(上限) 只能是Car或者Car的子类
    //? super   Car(下限) 只能是Car或者Car的父类
    //泛型方法
    public static void go(ArrayList<? extends Car> cars) {

    }

    //泛型方法
    public static <T> T test(T t) {
        return t;
    }
}
